from flask import Flask, render_template
import pandas as pd
import matplotlib.pyplot as plt

# 以下均是希望可视化酷炫
# import cufflinks as cf
#
# import plotly as py
# import plotly.graph_objs as go

app = Flask(__name__)

# 1.读数据


# 2.定义http的endpoint终结点/path
# 目标： 读取 不同电影类型的表格，并展示在网页中


def read_data_users():
    return pd.read_csv('./datas/movielens-1m/users.dat',
                      sep="::",
                      engine="python",
                      header=None,
                      names="UserID::Gender::Age::Occupation::Zip-code".split("::")
                      )

def read_data_movies():
    return pd.read_csv('./datas/movielens-1m/movies.dat',
                      sep="::",
                      engine="python",
                      header=None,
                      names="电影ID::电影名称::电影类型".split("::")
                      )


@app.route('/get_user_info')
# 视图函数
def get_user_info():
  # 调用读取数据的方法
    df = read_data_users()
    # 筛选数据目标（处理数据）
    df_male = df[df["Gender"] == "M"].head()
    df_female = df[df["Gender"] == "F"].head()
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    return render_template(
        "user_info.html",
        # male_data、female_data 是HTML文件中的变量
        male_data=df_male.to_html(classes="male", index=False),
        female_data=df_female.to_html(classes="female", index=False)
    )

@app.route('/movies_Animation')
def get_movies_Animation():
    df = read_data_movies()
    # 筛选数据目标（处理数据）
    df_Animation = df[df['电影类型'].str.contains('Animation')]
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    # print(df_Animation)
    # Animation_vis = pd.read_excel('movie_year_Animation.xlsx')  # 导入Excel文件
    # # 折线图
    # x = df['年份']  # x轴数据
    # y = df['本类型电影数量']  # y轴数据
    # plt.plot(x, y, color='m', mfc='w')
    # plt.show()
    return render_template(
        "movies_Animation.html",
        # male_data、female_data 是HTML文件中的变量
        Animation_data=df_Animation.to_html(classes="Animation", index=False),
    )

@app.route('/movies_Comedy')
def get_movies_Comedy():
    df = read_data_movies()
    # 筛选数据目标（处理数据）
    df_Comedy = df[df['电影类型'].str.contains('Comedy')]
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    # print(df_Animation)
    return render_template(
        "movies_Comedy.html",
        # male_data、female_data 是HTML文件中的变量
        Comedy_data=df_Comedy.to_html(classes="Comedy", index=False)
    )

@app.route('/movies_FilmNoir')
def get_movies_FilmNoir():
    df = read_data_movies()
    # 筛选数据目标（处理数据）
    df_FilmNoir = df[df['电影类型'].str.contains('Film-Noir')]
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    # print(df_Animation)
    return render_template(
        "movies_FilmNoir.html",
        # male_data、female_data 是HTML文件中的变量
        FilmNoir_data=df_FilmNoir.to_html(classes="FilmNoir", index=False)
    )

@app.route('/movies_Romance')
def get_movies_Romance():
    df = read_data_movies()
    # 筛选数据目标（处理数据）
    df_Romance = df[df['电影类型'].str.contains('Romance')]
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    # print(df_Animation)
    return render_template(
        "movies_Romance.html",
        # male_data、female_data 是HTML文件中的变量
        Romance_data=df_Romance.to_html(classes="Romance", index=False)
    )

@app.route('/movies_Horror')
def get_movies_Horror():
    df = read_data_movies()
    # 筛选数据目标（处理数据）
    df_Horror = df[df['电影类型'].str.contains('Horror')]
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    # print(df_Animation)
    return render_template(
        "movies_Horror.html",
        # male_data、female_data 是HTML文件中的变量
        Horror_data=df_Horror.to_html(classes="Horror", index=False)
    )

@app.route('/movies_Adventure')
def get_movies_Adventure():
    df = read_data_movies()
    # 筛选数据目标（处理数据）
    df_Adventure = df[df['电影类型'].str.contains('Adventure')]
    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    # print(df_Animation)
    return render_template(
        "movies_Adventure.html",
        # male_data、female_data 是HTML文件中的变量
        Adventure_data=df_Adventure.to_html(classes="Adventure", index=False)
    )

if __name__ == '__main__':
    app.run(
        debug=True
    )

